import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

// 用常量代替事件类型，使得代码更清晰
export const LOGIN_IN = 'LOGIN_IN';//登陆
export const LOGIN_OUT = 'LOGIN_OUT';//退出

const store = new Vuex.Store({
  // 存储数据
  state: {
    // 商品数据
    data:[
      {name:"马云",price:200},
      {name:"马化腾",price:300},
      {name:"王健林",price:100},
      {name:"李嘉诚 ",price:400},
    ],
    // token
    token: localStorage.getItem('userToken') ? localStorage.getItem('userToken') : '',
    // 用户的登录信息
    userInfo:null,
    // 请求错误信息存储
    // httpError:{
    //   hasError:false,
    //   status:'',
    //   statusText:''
    // },

  },
  // 修改数据，是vue中computed的计算属性
  getters: {
    // 商品降价数据处理
    salePrice(state){
      var saleData = state.data.map(item => {  //.map遍历修改对象 ，一般用于监听
        return {
          name: item.name+ "：",
          price: item.price + "元"
        }
      })
      return saleData;
    },
    // 获取登录用户信息
    getLoginUserInfo(state){
      return state.userInfo ? state.userInfo.userName : "未登录"
    }
  },
  // 监听state改变，方法写在vue中的methods中，用commit调用
  mutations: {
    // 错误信息存储
    // ON_HTTP_ERROR(state, payload){
    //   state.httpError = payload
    // },
    //登入
    [LOGIN_IN](state, token) {
      state.token = token;
      localStorage.setItem('userToken', token);
    },
    //登出 or 退出登入
    [LOGIN_OUT](state, token) {
      localStorage.removeItem("userToken", token);
      state.token = token;
    },
    // 商品数据
    reducePrice(state, payload){  //payload是页面传入的参数
      state.data.forEach(item => {
        item.price -= payload;
      });
    },
    

  },
  // 异步操作 actions这里提交的是mutation
  actions: {  //actions的方法名必须和mutations的方法名一致
    getLoginInInfo({commit},token){
      commit('LOGIN_IN',token)
    },
    getLoginOutInfo({commit},token){
      commit('LOGIN_OUT',token)
    },
    // 商品降价处理
    reducePrice(context, payload){  //context相当于this.$store
      setTimeout(function(){
        context.commit('reducePrice',payload);  //此处调用mutations中的方法reducePrice
      },1000)
    },

  }
});

export default store